6
תגובות

שרשור בשאילתת MYSQL

פתח hexdec ,
האם אוכל לעשות ככה לדוגמה:
$query = mysql_query("SELECT `id` FROM `table` WHERE `title` = $title") or die(mysql_error();

או שחייב לעשות " ואז .$title. "?
תודה.

6 תשובות

avatar ענה משתמש_106771 ב 07 לפברואר 2012 #

כל עוד השאילתה ב " (גרש כפול) ולא ב ' (גרש יחידה) אפשר, עדיף להוסיף את המשתנה ב {}, מבחינת מהירות ותקינות קוד.
דוגמא:

<?php
/* string */
$string = 'phpguide.co.il';
SQL_query("SELECT 1 FROM `tbl` WHERE `row` = '{$string}';");
/* array */
$array['key'] = 'value';
SQL_query("SELECT 1 FROM `tbl` WHERE `row` = '{$array['key']}';");

avatar ענה משתמש_107470 ב 08 לפברואר 2012 #

אם אתה משתמש בגירשיים כפולות ולא יחידות אז php כבר מציבה את המשתנים לבד.
כמו שנאמר למעלה ^, במקרה של מערכים php לא "מוצאת" את מה צריך להציב מסיבה מסוימת, ולכן יש סוגריים מסולסלים.

avatar ענה intval ב 08 לפברואר 2012 #

ה"סיבה המסוימת" היא ש PHP מחפשת את שם המשתנה הלגיטימי הערוך ביותר שמופיע במחרוזת. סוגריים מרובעים לא יכולים להיות חלק משם משתנה תקני ולכן PHP חושבת שהמשתנה נגמר איפה שמתחילים הסוגריים.

avatar ענה hexdec ב 08 לפברואר 2012 #

תודה רבה!

avatar ענה iiddaannyy ב 08 לפברואר 2012 #

*לא מדויק, php מתייחסת לסוגריים המרובעים כשם תקני במקרה של הצבת ערכים במחרוזות, הבעיה היא שהיא לא מתייחסת כך לגירשיים (במקרה שפונים לערך אסוציאטיבי).

לכן זה יעבוד:

echo "hello $x[0]";

וזה לא:
echo "hello $x['key']";

הבעיה היא בגירשיים ולא בסוגריים המרובעים. :)

avatar ענה intval ב 08 לפברואר 2012 #

צודק, תודה :)